package boot

import (
	_ "github.com/GoAdminGroup/go-admin/modules/db/drivers/mysql"
	_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
	_ "github.com/gogf/gf/contrib/nosql/redis/v2"

	_ "github.com/beherochuling/beesoft_api/boot/internal"

	_ "github.com/GoAdminGroup/themes/sword"
	_ "github.com/beherochuling/beesoft_api/app/admin/languages"
	_ "github.com/beherochuling/beesoft_api/router" // 路由

	"fmt"

	"github.com/beherochuling/beesoft_api/app/service/command"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gcmd"
	"github.com/gogf/gf/v2/os/gctx"
)

func init() {
	// bootGrpc()
	fmt.Println("boot/boot/init")
}
func Run() {
	// schedule.Work()

	s := g.Server()

	// setSession(s)

	// "go.elastic.co/apm/module/apmhttp"
	// if true {
	// 	h := s.GetHandler()
	// 	h = apmhttp.Wrap(http.Handler(http.HandlerFunc(h))).ServeHTTP
	// 	s.SetHandler(h)
	// }
	// boot.RunGoAdmin(s)
	cmd, err := gcmd.NewFromObject(command.CMain{})
	if err != nil {
		panic(err)
	}
	cmd.Run(gctx.New())

	s.Run()
}

// func bootGrpc() {
//	ctx := context.Background()
//
//	rootCaFile := g.Config().MustGet(ctx, "tls.rootCaFile").String()
//	certFile := g.Config().MustGet(ctx, "tls.backend.certFile").String()
//	keyFile := g.Config().MustGet(ctx, "tls.backend.certFile").String()
//	opt := grpc.Creds(net.NewTls(rootCaFile, certFile, keyFile).Server())
//	opt1 := grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(
//		grpc_ctxtags.StreamServerInterceptor(),
//		grpc_opentracing.StreamServerInterceptor(),
//		grpc_prometheus.StreamServerInterceptor,
//		grpc_zap.StreamServerInterceptor(zapLogger),
//		grpc_auth.StreamServerInterceptor(myAuthFunction),
//		grpc_recovery.StreamServerInterceptor(),
//	))
//	opt2 := grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(
//		grpc_ctxtags.UnaryServerInterceptor(),
//		grpc_opentracing.UnaryServerInterceptor(),
//		grpc_prometheus.UnaryServerInterceptor,
//		grpc_zap.UnaryServerInterceptor(zapLogger),
//		grpc_auth.UnaryServerInterceptor(myAuthFunction),
//		grpc_recovery.UnaryServerInterceptor(),
//	))
//	// s := grpc.NewServer()
//	s := grpc.NewServer(opt, opt1, opt2)
//
//	router.Register(s)
//
//	protocol := g.Config().MustGet(ctx, "grpc.protocol").String()
//	port := g.Config().MustGet(ctx, "grpc.port").String()
//	listen, err := rawNet.Listen(protocol, port)
//	if err != nil {
//		grpclog.Fatalf("Failed to listen: %v", err)
//	}
//
//	err = s.Serve(listen)
//	if err != nil {
//		grpclog.Fatalf("Failed to serve: %v", err)
//	}
// }
// func setSession(s *ghttp.Server) {
//	// ttl := time.Minute * 10
//	// path := ""
//	// prefix := "session_"
//
//	// redis := g.Redis()
//	// redis := gins.Redis()
//	// redis, err := gredis.New(&gredis.Config{}) // todo
//	// if err != nil {
//	// 	panic(err)
//	// }
//
//	session := gsession.NewStorageMemory()
//	// session := gsession.NewStorageFile(path, ttl)
//	// session := gsession.NewStorageRedis(redis, prefix)
//	// session := gsession.NewStorageRedisHashTable(redis, prefix)
//
//	s.SetSessionStorage(session)
// }
